package main

import (
	"fmt"
	"time"
)

func sayHello(){
	for i:=0;i<10;i++{
		time.Sleep(time.Second)
		fmt.Println("hello,world")
	}
}

// 函数
func test(){

	// 这里我们可以使用defer + recover
	defer func(){
		// 捕获test抛出的panic
		if err := recover();err!=nil{
			fmt.Println("test() 发生错误，err")
		}
	}()
	var myMap map[int]string
	myMap[0] = "golang" // error
}
/*
说明:如果我们起了一个协程，但是这个协程出现了panic,如果我们没有
捕获这个panic,就会造成整个程序崩溃，这时我们可以在goroutine中使用
recover来捕获panic,进行处理，这样即使这个协程发生的问题，但是主
var map1 map [stringJstring
线程仍然不受影响，可以继续执行。
map1["no1"]= "tom"
*/
func main() {
	go sayHello()
	go test()
	
	for i:=0;i<10;i++{
		fmt.Println("main() ok=",i)
		time.Sleep(time.Second)
	}
}